# open('文件名', 'r/w/a', encoding='UTF-8') 这就是打开文件的语句，其中，后两个参数是缺省参数，模式默认值为只读，编码方式默认值是空
# 文件名的路径一般选择使用相对路径；r/w/a 分别表示以只读，只写和追加的方式打开文件；encoding 表示编码方式，一般选择 UTF-8，还可以选择 gbk
# 这句返回值是文件对象，常用实例保存起来，以便后续操作文件使用
# 文件对象.write('写入的内容') 这是写文件的语句，返回值是写入的字符数，语句执行的前提是以只写或追加的方式打开了文件
# 文件对象.read() 这是读文件的语句，返回值是读取的内容，类型是字符串，语句执行的前提是以只读的方式打开了文件
# 文件对象.close() 这是关闭文件的语句，一般支持自动保存文件内容，语句执行之后这个文件对象不能继续使用了
f = open('a.txt', 'w', encoding='UTF-8')  # 当以只写方式打开一个不存在的文件时，执行语句后会自动创建一个同名文件
f.write('谁能想到眼前这位80岁的老人在60年前的时候还是个年轻人呢？\n')
f.write('谁能想到眼前这位80岁的老人在60年前的时候还是个年轻人呢？\n')
f.close()
f = open('a.txt', 'r', encoding='UTF-8')  # 若文件不存在代码报错
buf = f.read()
print(buf)
f.close()
with open('a.txt', 'a', encoding='UTF-8') as f:
    f.write('谁能想到还有这种操作？\n')
# 这种打开文件的方式可以省却关闭文件的语句，因为它可以自动关闭
# 缩进内的照常写文件操作语句，出了缩进后自动关闭文件， as 后是别名，也就是实例名称，其它大同小异
with open('a.txt', encoding='UTF-8') as f:
    print(f.readline())  # 这个方法运行完后，指针会走至下一行的首部
    print(f.readline())  # 所以这就是为什么这行的输出是下一行
with open('a.txt', encoding='UTF-8') as f:
    for x in f:  # 在这里 f 是个可迭代对象，所以可以直接用 for 循环遍历
        print(x, end='')  # 结果一样是按每行输出
with open('a.txt', encoding='UTF-8') as f:
    print()
    lst = f.readlines()  # 代码作用是将文件里每行内容分为一个元素，各元素都是字符串类型，再组成一个列表
    print(type(lst), lst)
    for y in lst:
        print(y, end='')
# with open('a.txt', 'w', encoding='UTF-8') as f:
#     f.write('')
print()
print('这是个测试！','hello!', sep='*', end='  ')
print()
print('这是个测试！')
print('这是个测试！')
